﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;

namespace FONCREAGROINTEGRAL.Controllers
{
    public class contratoadendaController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();
        //
        // GET: /contratoadenda/
        public ActionResult IndexByIdAdenda(int id)
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string nrocontrato = Convert.ToString(Request.QueryString["query"]);

            var query = entidades.CONTRATOADENDAPERSONALs
                .Where(ca => ca.idcontratoadendapersonal == id);
            //.Where(ca => ca.idcontrato == null);

            if (!String.IsNullOrEmpty(nrocontrato))
            {
                query = query.Where(ca => ca.nro.ToUpper().Contains(nrocontrato.ToUpper()));
            }

            var result = (from ca in query.OrderBy(ca => ca.fechafinreal).OrderByDescending(ca => ca.idcontratoadendapersonal)/*.Skip(start).Take(limit)*/.ToList()
                          join tt in entidades.TIPOTRABAJADORs on ca.IdTipoTrabajador equals tt.IdTipoTrabajador
                          join cat in entidades.CATEGORIARRHHs on tt.IdCategoria equals cat.IdCategoria
                         
                          join ne in entidades.NIVELEDUCATIVOes on ca.IdNivelEducativo equals ne.IdNivelEducativo
                          join go in entidades.GRUPOOCUPACIONALs on ca.IdGrupoOcupacional equals go.IdGrupoOcupacional
                          join tc in entidades.TIPOCONTRATOes on ca.IdTipoContrato equals tc.IdTipoContrato
                          join hor in entidades.HORARIOs on ca.IdHorario equals hor.IdHorario
                         
                          join posp in entidades.POSICIONPERSONAs on ca.idcontratoadendapersonal equals posp.idcontratoadendapersonal
                          join pos in entidades.POSICIONs on posp.IdPosicion equals pos.IdPosicion
                         
                          join ar in entidades.AREAs on pos.IdArea equals ar.IdArea
                          
                          join car in entidades.CARGOes on pos.IdCargo equals car.IdCargo
                          
                          join tp in entidades.TIPOPAGOPLANILLAs on ca.tipopago equals tp.IdTipoPagoPlanilla
                          join pi in entidades.PERIODICIDADINGRESOes on ca.periodicidadingreso equals pi.IdPeriodicidadIngreso
                          //where posp.estado == true

                          select new
                          {
                              idcontratoadendapersonal = ca.idcontratoadendapersonal,
                              IdPersonal = ca.IdPersonal,
                              //nro = ca.nro,
                              //fechainicio = string.Format("{0:d}", ca.fechainicio),
                              //fechafin = string.Format("{0:d}", ca.fechafin),
                              IdCategoria = cat.IdCategoria,
                              NomCategoriaRRHH = cat.Nombre.ToUpper(),
                              IdTipoTrabajador = ca.IdTipoTrabajador,
                              NomTipoTrabajador = tt.Descripción,
                              IdNivelEducativo = ca.IdNivelEducativo,
                              NomNivelEducativo = ne.Descripcion,
                              IdTipoContrato = ca.IdTipoContrato,
                              NomTipoContrato = tc.Descripcion,
                              IdHorario = ca.IdHorario,
                              NomHorario = hor.Descripcion,
                              IdGrupoOcupacional = ca.IdGrupoOcupacional,
                              NomGrupoOcupacional = go.Descripcion,
                              IdArea = ar.IdArea,
                              NomArea = ar.Nombre,
                              IdPosicion = pos.IdPosicion,
                              NomCargo = car.NomCargo,
                              IdTipoPagoPlanilla = ca.tipopago,
                              NomTipoPagoPlanilla = tp.NomTipoPagoPlanilla,
                              IdPeriodicidadIngreso = pi.IdPeriodicidadIngreso,
                              NomPeriodicidadIngreso = pi.NomPeriodicidadIngreso,
                              idcontrato = id,
                              sueldo = ca.sueldo,
                              Tipo = ca.tipo,

                          }).ToList();
            //return Json(new { text = ".", children = result }, JsonRequestBehavior.AllowGet);
            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult IndexById(int id)
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string nrocontrato = Convert.ToString(Request.QueryString["query"]);

            var query = entidades.CONTRATOADENDAPERSONALs
                .Where(ca => ca.idcontratoadendapersonal == id);
                //.Where(ca => ca.idcontrato == null);

            if (!String.IsNullOrEmpty(nrocontrato))
            {
                query = query.Where(ca => ca.nro.ToUpper().Contains(nrocontrato.ToUpper()));
            }

            var result = (from ca in query.OrderBy(ca => ca.fechafinreal).OrderByDescending(ca => ca.idcontratoadendapersonal)/*.Skip(start).Take(limit)*/.ToList()
                          join tt in entidades.TIPOTRABAJADORs on ca.IdTipoTrabajador equals tt.IdTipoTrabajador
                          join cat in entidades.CATEGORIARRHHs on tt.IdCategoria equals cat.IdCategoria
                          join ne in entidades.NIVELEDUCATIVOes on ca.IdNivelEducativo equals ne.IdNivelEducativo
                          join go in entidades.GRUPOOCUPACIONALs on ca.IdGrupoOcupacional equals go.IdGrupoOcupacional
                          join tc in entidades.TIPOCONTRATOes on ca.IdTipoContrato equals tc.IdTipoContrato
                          join hor in entidades.HORARIOs on ca.IdHorario equals hor.IdHorario
                          join posp in entidades.POSICIONPERSONAs on ca.idcontratoadendapersonal equals posp.idcontratoadendapersonal
                          join pos in entidades.POSICIONs on posp.IdPosicion equals pos.IdPosicion
                          join ar in entidades.AREAs on pos.IdArea equals ar.IdArea
                          join car in entidades.CARGOes on pos.IdCargo equals car.IdCargo
                          join tp in entidades.TIPOPAGOPLANILLAs on ca.tipopago equals tp.IdTipoPagoPlanilla
                          join pi in entidades.PERIODICIDADINGRESOes on ca.periodicidadingreso equals pi.IdPeriodicidadIngreso
                          join pl in entidades.PERIODOLABORALs on ca.IdPeriodoLaboral equals pl.IdPeriodoLaboral into lpl
                          from x in lpl.DefaultIfEmpty()
                          //where posp.estado == true
                          select new
                          {
                              idcontratoadendapersonal = ca.idcontratoadendapersonal,
                              IdPersonal = ca.IdPersonal,
                              nro = ca.nro,
                              fechainicio = string.Format("{0:d}", ca.fechainicio),
                              fechafin = string.Format("{0:d}", ca.fechafin),
                              IdCategoria = cat.IdCategoria,
                              NomCategoriaRRHH = cat.Nombre.ToUpper(),
                              IdTipoTrabajador =  ca.IdTipoTrabajador,
                              NomTipoTrabajador = tt.Descripción,
                              IdNivelEducativo = ca.IdNivelEducativo,
                              NomNivelEducativo = ne.Descripcion,
                              IdTipoContrato = ca.IdTipoContrato,
                              NomTipoContrato = tc.Descripcion,
                              IdHorario = ca.IdHorario,
                              NomHorario = hor.Descripcion,
                              IdGrupoOcupacional = ca.IdGrupoOcupacional,
                              NomGrupoOcupacional = go.Descripcion,
                              IdArea = ar.IdArea,
                              NomArea = ar.Nombre,
                              IdPosicion = pos.IdPosicion,
                              NomCargo = car.NomCargo,
                              IdTipoPagoPlanilla = ca.tipopago,
                              NomTipoPagoPlanilla = tp.NomTipoPagoPlanilla,
                              IdPeriodicidadIngreso = pi.IdPeriodicidadIngreso,
                              NomPeriodicidadIngreso = pi.NomPeriodicidadIngreso,
                              idcontrato = ca.idcontrato,
                              sueldo = ca.sueldo,
                              Tipo=ca.tipo,
                              IdPeriodoLaboral = x == null ? 0 : x.IdPeriodoLaboral,
                              Seguro = ca.Seguro
                              
                          }).ToList();
            //return Json(new { text = ".", children = result }, JsonRequestBehavior.AllowGet);
            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Index(int id)
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string nrocontrato = Convert.ToString(Request.QueryString["query"]);

            var query = entidades.CONTRATOADENDAPERSONALs
                .Where(ca => ca.IdPersonal == id)
                .Where(ca => ca.idcontrato == null);

            if (!String.IsNullOrEmpty(nrocontrato)) { 
                query = query.Where(ca => ca.nro.ToUpper().Contains(nrocontrato.ToUpper())); 
            }
            
            var result = (from ca in query.OrderBy(ca => ca.fechafinreal).OrderByDescending(ca => ca.idcontratoadendapersonal)/*.Skip(start).Take(limit)*/.ToList()
                          join tt in entidades.TIPOTRABAJADORs on ca.IdTipoTrabajador equals tt.IdTipoTrabajador
                          join cat in entidades.CATEGORIARRHHs on tt.IdCategoria equals cat.IdCategoria
                          join ne in entidades.NIVELEDUCATIVOes on ca.IdNivelEducativo equals ne.IdNivelEducativo
                          join go in entidades.GRUPOOCUPACIONALs on ca.IdGrupoOcupacional equals go.IdGrupoOcupacional
                          join tc in entidades.TIPOCONTRATOes on ca.IdTipoContrato equals tc.IdTipoContrato
                          join hor in entidades.HORARIOs on ca.IdHorario equals hor.IdHorario
                          join posp in entidades.POSICIONPERSONAs on ca.idcontratoadendapersonal equals posp.idcontratoadendapersonal
                          join pos in entidades.POSICIONs on posp.IdPosicion equals pos.IdPosicion
                          join ar in entidades.AREAs on pos.IdArea equals ar.IdArea
                          join car in entidades.CARGOes on pos.IdCargo equals car.IdCargo
                          //where posp.estado == true
                          select new
                          {
                              Id = ca.idcontratoadendapersonal,
                              Nro = ca.nro,
                              //Fechafirma = string.Format("{0:d}", ca.fecha),
                              Fechainicio = 
                              string.Format("{0:d}", ca.fechainicio),
                              Sueldo = ca.sueldo,
                              Fechafin = string.Format("{0:d}", ca.fechafin),
                              expanded = true,
                              Estado = ca.estado,
                              Tipo = ca.tipo,
                              IdCat = tt.IdCategoria,
                              Catt = cat.Nombre,
                              Tipotrabajador = tt.Descripción,
                              Niveleducativo = ne.Descripcion,
                              //Idgo = go.IdGrupoOcupacional,
                              Grupoocupacional = go.Descripcion,
                              Discapacidad = ca.discapacidad == true ? "SI":"NO",
                              Tipocontrato = tc.Descripcion,
                              Hora = hor.Ciclo,
                              Horario = hor.Ciclo +" - "+hor.Descripcion,
                              Tipopago = ca.tipopago == 1 ? "EFECTIVO" : ca.tipopago == 2 ? "DEPOSITO EN CUENTA" : "OTROS",
                              IdArea = ar.IdArea,
                              Area = ar.Nombre,
                              Codigoarea = ar.CodArea,
                              Cargo = car.NomCargo,
                              children = entidades.Radendasporcontrato(ca.idcontratoadendapersonal),
                              Idpos = pos.IdPosicion,
                          }).ToList();
            return Json(new {text= ".", children = result }, JsonRequestBehavior.AllowGet);
        }

        //
        // GET: /contratoadenda/Details/5
        public ActionResult Comprobar(int id)
        {
            var query = entidades.CONTRATOADENDAPERSONALs.Where(c => c.IdPersonal == id && c.estado == true);

            if (query.Count() == 1) { return Content("OK"); }
            else if (query.Count() >= 1) { return Content("MAS"); }
            else if (query.Count() == 0) { return Content("NO"); }
            return Content("Fatal");
        }
        public ActionResult ComprobarSueldo(int id)
        {
            try
            {
                var ejerciciomes = entidades.EJERCICIOMES.Single(em => em.vigente == true);

                var query = entidades.CONTRATOADENDAPERSONALs.Single(c => c.IdPersonal == id && c.estado == true);

                var sueldo = query.sueldo;

                if (sueldo == null)
                    sueldo = 0;

                return Content(Convert.ToString(sueldo) + "#" + Convert.ToString(query.idcontratoadendapersonal) + "#" + Convert.ToString(ejerciciomes.idejerciciomes));
            }
            catch {
                return Content("0#0#0");
            }
        }
        public ActionResult SueldoContrato(int id)
        {
            try
            {
                //var ejerciciomes = entidades.EJERCICIOMES.Single(em => em.vigente == true);

                var query = entidades.CONTRATOADENDAPERSONALs.Single(c => c.idcontratoadendapersonal == id);

                var sueldo = query.sueldo;

                if (sueldo == null)
                    sueldo = 0;

                return Content(Convert.ToString(sueldo));
            }
            catch
            {
                return Content("0");
            }
        }
        public ActionResult SueldoContratox(int id)
        {
            try
            {
                var eccpersona = entidades.CCOSTOPORPERSONAs.Single(ccp => ccp.idccostoporpersona == id);

                var query = entidades.RENTAQUINTAs.Single(rq => rq.IdPersonal == eccpersona.IdPersonal && rq.idejerciciomes == eccpersona.idejerciciomes);

                var sueldo = query.sueldo-(query.dh >0 ? query.dh : 0);

                if (sueldo == null)
                    sueldo = 0;

                return Content(Convert.ToString(sueldo));
            }
            catch
            {
                return Content("0");
            }
        }
        public ActionResult ComprobarContrato(int id)
        {
            try
            {
                var ejerciciomes = entidades.EJERCICIOMES.Single(em => em.vigente == true);

                var query = entidades.CONTRATOADENDAPERSONALs.Single(c => c.IdPersonal == id && c.estado == true);

                return Content(Convert.ToString(query.idcontratoadendapersonal)+"#"+Convert.ToString(ejerciciomes.idejerciciomes));
            }
            catch
            {
                return Content("0#0");
            }
        }
        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /contratoadenda/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /contratoadenda/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /contratoadenda/Edit/5
 
        public ActionResult Edit(int id)
        {
            return View();
        }

        //
        // POST: /contratoadenda/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add update logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /contratoadenda/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /contratoadenda/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
